/*
*Universidad del Valle de Guatemala
* Roger Artemio Diaz Fuentes
* 12176
* Juan de Dios Chivalan Rojas
* 12175
* Esta es la implementacion del Main.
* 
 */
package hojas9;
import java.io.IOException;
import java.util.Scanner;

public class Hojas9 {
    public static void main(String[] args){
        
        Scanner dato = new Scanner(System.in); //scanner para reconocer opciones de menu
        int opcion1; // Seleccion del usuario para realizar
        int opcion2; // Seleccion del usuario para la pregunta 3
        AlgoFloyd matriz = new AlgoFloyd(); // se crea la matris de adyacencia
        do{
            System.out.println("----Bienvenido a la Ultima hoja de Trabajo----\n1.Ruta mas corta entre dos departamentos\n2.Departamento en el centro del Grafo\n3. Modificar grafo\n4.Salir\nIngrese su opcion:");
            opcion1 = dato.nextInt();
           switch(opcion1)
           {
               case 1:// Si la respuesta es 1, preguntar por las ciudades y desplegar resultados
                System.out.println("\n------Matriz de adyacencia--------");// de desplega la matriz de adyacencia
                matriz.matAdyacencia.show();
                System.out.println("-----------------------------------------");
                System.out.println("-Ingrese el nombre del departamemento donde salio:");
                String ciudad1 = dato.next(); 
                System.out.println("-Ingrese el nombre del departamemento a donde quiere llegar:");
                String ciudad2 = dato.next();
                // Si las ciudades se encuentran en la matriz, entonces desplegar la distancia minima y la ruta completa
                if(matriz.matAdyacencia.contains(ciudad1)&&matriz.matAdyacencia.contains(ciudad2)){
                    System.out.println("\nLa distancia minima es: "+matriz.matAdyacencia.getEdge(ciudad1, ciudad2)+".");
                    if(matriz.matAdyacencia.getEdge(ciudad1, ciudad2)!=10000){
                        System.out.print("La ruta es: "+ciudad1);
                        System.out.println(", "+ciudad2);
                        System.out.println("-----------------------------------------");
                    }
                }break;
                   
               case 2: // Si la respuesta es 2, desplegar el centro de grafo
                   try{
                       System.out.println("\n------Matriz de adyacencia--------");// de desplega la matriz de adyacencia
                        matriz.matAdyacencia.show();// de desplega la matriz de adyacencia
                        matriz.centroGrafo();
                        } catch(Exception e )
                        {
                            System.out.println("-----------------------------------------");
                            System.out.println("//////Aun no hay datos en la base de datos//////");
                            System.out.println("-----------------------------------------\n");
                        }
                   break;
               case 3:// Si la respuesta es 3, preguntar cual es el cambio a realizar y ejecutarlo
                    System.out.println("-----------------------------------------");
                    System.out.println("\n------Matriz de adyacencia--------\n Al entrar aqui se borro toda el grafo!!!");// de desplega la matriz de adyacencia
                    matriz.matAdyacencia.show();// de desplega la matriz de adyacencia
                    System.out.println("--Otras Acciones---\n1. Existe algun retraso entre dos departamentos\n2. Crear una nueva trayectoria\nIngrese su opcion:");
                    opcion2 = dato.nextInt();
                    // Si la respuesta es 1, preguntar por el nombre de las ciudades y colocar un numero muy grande
                    // en la matriz de adyacencia para indicar que no hay conexion
                        switch(opcion2)
                        {
                            case 1:// Si la respuesta es 1, preguntar por el nombre de las ciudades y colocar un numero muy grande en la matriz de adyacencia para indicar que no hay conexion
                                System.out.println("-----------------------------------------");
                                System.out.println("-Ingrese el nombre del departamemento donde salio:");
                                ciudad1 = dato.next();
                                System.out.println("-Ingrese el nombre del departamemento a donde quiere llegar:");
                                ciudad2 = dato.next();
                                System.out.println("Ingrese la distancia devido a tardanza:");
                                int retraso = dato.nextInt();
                                
                                if(matriz.matAdyacencia.contains(ciudad1)&&matriz.matAdyacencia.contains(ciudad2)){
                                    matriz.matAdyacencia.addEdge(ciudad1, ciudad2, retraso);
                                    // Guarda los cambios en el archivo
                                    try {
                                        matriz.departamentos.write(ciudad1+" "+ciudad2+" 10000");
                                    } catch (IOException ex) {
                                        ex.printStackTrace();
                                    }
                                }
                                System.out.println("-----------------------------------------");
                                break;
                            case 2: // Si la respuesta es 2, preguntar por el nombre de las ciudades y agregar nueva distancia.
                                System.out.println("-----------------------------------------");
                                System.out.println("-Ingrese el nombre del departamemento donde salio:");
                                ciudad1 = dato.next();
                                System.out.println("-Ingrese el nombre del departamemento a donde quiere llegar:");
                                ciudad2 = dato.next();
                                System.out.println("Ingrese la distancia entre departamento en KM:");
                                int distancia = dato.nextInt();
                                // Si las ciudades ya existen, cambiar el valor
                                if(matriz.matAdyacencia.contains(ciudad1)&&matriz.matAdyacencia.contains(ciudad2)){
                                    matriz.matAdyacencia.addEdge(ciudad1, ciudad2, distancia);
                                }
                                // Si las ciudades no existen, agregarlas a la matriz
                                else{
                                    matriz.matAdyacencia.add(ciudad1);
                                    matriz.matAdyacencia.add(ciudad2);
                                    matriz.matAdyacencia.addEdge(ciudad1, ciudad2, distancia);
                                }
                                // Guarda los cambios en el archivo
                                try {
                                    matriz.departamentos.write(ciudad1+" "+ciudad2+" "+distancia);
                                } catch (IOException ex) {
                                    ex.printStackTrace();
                                }
                                System.out.println("-----------------------------------------");
                                break;
                            default:
                                System.out.println("/////Es no esta entre la opciones!! cuidado////////");
                                break;
                        }
                   break;
               case 4:
                   System.out.println("--------Gracias por utilizar este maravilloso programa-------------");
                   break;
               default:
                   System.out.println("/////Es no esta entre la opciones!! cuidado////////");
                   break;
           }
        }while (opcion1!=4);// se cierra el programa 
        
        
    }
}

